package cn.mystylefree.sqlSession;

import cn.mystylefree.config.XMLConfigBuilder;
import cn.mystylefree.po.Configuration;
import org.dom4j.DocumentException;

import java.beans.PropertyVetoException;
import java.io.InputStream;

/**
 * @program my-project-model
 * @description:
 * @author: lee
 * @create: 2022/06/14 20:41
 */
public class SqlSessionFactoryBuilder {
    /**
     * 创建sqlSessionFactoryBuilder类：
     * <p>
     * ⽅法：sqlSessionFactory build(inputStream)：
     * <p>
     * 第⼀：使⽤dom4j解析配置⽂件，将解析出来内容封装到Configuration和MappedStatement中
     * 第⼆：创建SqlSessionFactory的实现类DefaultSqlSession 产生sqlSession（会话对象）工厂模式
     *
     * @param inputStream
     * @return
     */
    public SqlSessionFactory build(InputStream inputStream) throws DocumentException, PropertyVetoException {
        //第⼀：使⽤dom4j解析配置⽂件，将解析出来内容封装到Configuration和MappedStatement中
        XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder();
        Configuration configuration = xmlConfigBuilder.parseConfig(inputStream);


        /*
         * 第⼆：创建SqlSessionFactory
         * 是一个工厂类：生产sqlSession 会话对象
         * 数据库交互的增、删、改、查方法都封装在sqlSession对象
         * 以有参构造的方式将 配置传递下去
         * */
        SqlSessionFactory sqlSessionFactory=new DefaultSqlSessionFactory(configuration);

        return sqlSessionFactory;
    }

}
